#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>

/*
 *
	-rw-rw-r-- 241 2024-12-19 7:21 chmod.c

 */

int main(){
	struct stat buf;
	int ret;
	
	ret = stat("chmod.c", &buf);
	if(ret < 0){
		perror("stat");
		return 0;
	}

	//判断文件类型 借助st_mode
	if(S_ISREG(buf.st_mode)){
		//常规文件
		printf("-");
	}
	if(S_ISDIR(buf.st_mode)){
		//目录文件
		printf("d");
	}
	if(S_ISCHR(buf.st_mode)){
		//字符设备
		printf("c");
	}
	if(S_ISBLK(buf.st_mode)){
		//块设备
		printf("b");
	}
	if(S_ISFIFO(buf.st_mode)){
		//管道文件
		printf("p");
	}
	if(S_ISSOCK(buf.st_mode)){
		//套接字文件
		printf("s");
	}

	//判断文件权限 借助st_mode
	for(int i = 8; i >= 0; i--){
		if(buf.st_mode & (1<<i)){
			switch(i % 3){
				case 2:
					printf("r");
					break;
				case 1:
					printf("w");
					break;
				case 0:
					printf("x");
					break;
			}
		}else{
			printf("-");
		}
	}

	//打印文件大小
	printf(" %d", (int)buf.st_size);

	//打印最后一次修改时间
	struct tm * t = localtime(&buf.st_ctime);
	printf(" %d-%d-%d %d:%d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min);

	//打印文件名
	printf(" chmod.c\n");


}

